package ace.module.sms.api.model.dto;

import io.swagger.v3.oas.annotations.media.Schema;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import jakarta.validation.constraints.*;
import jakarta.annotation.Nullable;
import java.io.Serializable;

/**
* 短信发送记录 data transform object.
*
* @author Caspar
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = SmsSendRecordDto.TABLE_DESC)
public class SmsSendRecordDto implements Serializable {

  public static final String TABLE_NAME = "sms_send_record";
  public static final String TABLE_DESC = "短信发送记录";
  public static final String ID_COLUMN_NAME = "id";
  public static final String ID_TITLE = "id";
  public static final String ID_DESC = "";
  public static final String SMS_APP_ID_COLUMN_NAME = "sms_app_id";
  public static final String SMS_APP_ID_TITLE = "短信应用id";
  public static final String SMS_APP_ID_DESC = "";
  public static final String IDENTIFIER_COLUMN_NAME = "identifier";
  public static final String IDENTIFIER_TITLE = "唯一编号,用于控制只发送一次";
  public static final String IDENTIFIER_DESC = "";
  public static final String PHONE_NUMBER_COLUMN_NAME = "phone_number";
  public static final String PHONE_NUMBER_TITLE = "手机号码";
  public static final String PHONE_NUMBER_DESC = "";
  public static final String CONTENT_COLUMN_NAME = "content";
  public static final String CONTENT_TITLE = "短信内容";
  public static final String CONTENT_DESC = "";
  public static final String SUPPLIER_TYPE_COLUMN_NAME = "supplier_type";
  public static final String SUPPLIER_TYPE_TITLE = "短信供应商id";
  public static final String SUPPLIER_TYPE_DESC = "";
  public static final String STATUS_COLUMN_NAME = "status";
  public static final String STATUS_TITLE = "状态";
  public static final String STATUS_DESC = " unknown-未知 waiting-待发送 sending-发送中 success-已成功 failure-已失败";
  public static final String RESULT_REMARK_COLUMN_NAME = "result_remark";
  public static final String RESULT_REMARK_TITLE = "发送结果备注";
  public static final String RESULT_REMARK_DESC = "";
  public static final String PLAN_SEND_TIME_COLUMN_NAME = "plan_send_time";
  public static final String PLAN_SEND_TIME_TITLE = "计划发送时间";
  public static final String PLAN_SEND_TIME_DESC = "单位时间-毫秒";
  public static final String ARRIVAL_TIME_COLUMN_NAME = "arrival_time";
  public static final String ARRIVAL_TIME_TITLE = "到达短信供应商时间";
  public static final String ARRIVAL_TIME_DESC = "单位时间-毫秒";
  public static final String DELETE_FLAG_COLUMN_NAME = "delete_flag";
  public static final String DELETE_FLAG_TITLE = "删除标识";
  public static final String DELETE_FLAG_DESC = "0-未删除";
  public static final String CREATE_TIME_COLUMN_NAME = "create_time";
  public static final String CREATE_TIME_TITLE = "创建时间";
  public static final String CREATE_TIME_DESC = "单位-毫秒";
  public static final String UPDATE_TIME_COLUMN_NAME = "update_time";
  public static final String UPDATE_TIME_TITLE = "更新时间";
  public static final String UPDATE_TIME_DESC = "单位-毫秒";
  public static final String ROW_VERSION_COLUMN_NAME = "row_version";
  public static final String ROW_VERSION_TITLE = "版本号和乐观锁";
  public static final String ROW_VERSION_DESC = "";

  @Schema(title = ID_TITLE, description = ID_DESC)
  private Long id;

  @Schema(title = SMS_APP_ID_TITLE, description = SMS_APP_ID_DESC)
  private Long smsAppId;

  @Size(max = 255)
  @Schema(title = IDENTIFIER_TITLE, description = IDENTIFIER_DESC)
  private String identifier;

  @Size(max = 255)
  @Schema(title = PHONE_NUMBER_TITLE, description = PHONE_NUMBER_DESC)
  private String phoneNumber;

  @Size(max = 255)
  @Schema(title = CONTENT_TITLE, description = CONTENT_DESC)
  private String content;

  @Size(max = 255)
  @Schema(title = SUPPLIER_TYPE_TITLE, description = SUPPLIER_TYPE_DESC)
  private String supplierType;

  @Size(max = 255)
  @Schema(title = STATUS_TITLE, description = STATUS_DESC)
  private String status;

  @Schema(title = RESULT_REMARK_TITLE, description = RESULT_REMARK_DESC)
  private String resultRemark;

  @Schema(title = PLAN_SEND_TIME_TITLE, description = PLAN_SEND_TIME_DESC)
  private Long planSendTime;

  @Schema(title = ARRIVAL_TIME_TITLE, description = ARRIVAL_TIME_DESC)
  private Long arrivalTime;

  @Schema(title = DELETE_FLAG_TITLE, description = DELETE_FLAG_DESC)
  private Long deleteFlag;

  @Schema(title = CREATE_TIME_TITLE, description = CREATE_TIME_DESC)
  private Long createTime;

  @Schema(title = UPDATE_TIME_TITLE, description = UPDATE_TIME_DESC)
  private Long updateTime;

  @Schema(title = ROW_VERSION_TITLE, description = ROW_VERSION_DESC)
  private Long rowVersion;

}